現在要讓資料可以長期保留在APP裡
在Android中,比較主要的保留資料方式就是SQL,但因為架構原因,跟真正的SQL使用有很大的差異
在Android中,使用的Room,需要先建立資料型態、表、interafce、repo等過程
Room的使用比較複雜,他需要一個plugin來輔助編譯這個庫
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.compose)
id("com.google.devtools.ksp")
}
在build.grdle.kts(Project: Tutorial2025)裡面的plugin,其中2.0.21要填入使用的Kotlin版本
id("com.google.devtools.ksp") version "2.0.21-1.0.27" apply false
之後要先Sync一次
val room_version = "2.8.1"
ksp("androidx.room:room-compiler:$room_version")
annotationProcessor("androidx.room:room-compiler:$room_version")
implementation("androidx.room:room-ktx:$room_version")
implementation("androidx.room:room-runtime:$room_version")
這樣Room就裝好了
在這邊補充一些添加依賴的方式,現在會有內建libs.version.toml來統一管理插件的版本與來源,在dependency底下的都是此類宣告,但也可以直接使用變數搭配字串的方式使用(絕對不是因為我只會這種)
我第一次用的時候也是覺得太複雜了,所以這邊會停留比較久
先講解Room DB與viewmodel的需要部件
@DAO
是一個interface後面會直接叫DAO其實Room跟SQL幾乎一樣(有的操作),但Room明顯比SQL複雜了不只一個層級
雖然說這邊不會用得那麼複雜(我也沒用過),但還是介紹一下有的功能
Join
語法data class UserWithOrders( // relation(1->n)
@Embedded val user: User,
@Relation(
parentColumn = "userId",
entityColumn = "userOwnerId"
)
val orders: List<Order>
)
@Entity(primaryKeys = ["studentId", "courseId"]) //中介(n->n)
data class StudentCourseCrossRef(
val studentId: Int,
val courseId: Int
)
對於Room的使用,我覺得真的不用學那麼複雜,又沒有要拿手機當作伺服器用
其實只要懂架構,簡單的資料庫還是很簡單的